from rest_framework import serializers
from rest_framework.authtoken.models import Token  # 导入DRF为我们提供的Token模型

from django.contrib.auth.models import User


class UserSerializer(serializers.ModelSerializer):
    """用户相关视图的序列化器"""
    class Meta:
        model = User  # 选定模型
        fields = ('pk', 'username', 'email', 'password')  # 选定字段
        extra_kwargs = {
            'password': {'write_only': True},
        }  # 不返回密码字段

    def create(self, validated_data):
        # 重写ModelSerializer的create()方法以保存User实例
        user = User(
            email=validated_data['email'],
            username=validated_data['username'],
        )
        user.set_password(validated_data['password'])  # 使用user.set_password()对密码编码，而不使用原始字符作为密码
        user.save()  # 保存User的实例
        Token.objects.create(user=user)  # 保存User实例后，在Token模型（数据库表）中，也对应保存一个Token实例作为用户的token
        return user